package oa.hleast.xswl.service.pms;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import oa.hleast.xswl.pojo.bo.admin.AdminProductBO;
import oa.hleast.xswl.pojo.bo.app.AppProductBO;
import oa.hleast.xswl.pojo.domain.pms.PmsSpu;
import oa.hleast.xswl.pojo.vo.pms.ShowSpuVo;

import java.util.List;


public interface IPmsSpuService extends IService<PmsSpu> {

    IPage<PmsSpu> list(Page<PmsSpu> page, PmsSpu spu);

    IPage<PmsSpu> inStockList(Page<PmsSpu> page, PmsSpu spu);

    boolean add(AdminProductBO spuBO);

    AdminProductBO getBySpuId(Long id);

    boolean removeBySpuIds(List<Long> spuIds);

    boolean updateById(AdminProductBO spuBO);

    AppProductBO getProductByIdForApp(Long id);

    Page<ShowSpuVo> recommendList(Integer page, Integer limit);

    Boolean closeStoreSpu(String id);

    IPage<PmsSpu> pagePmsSpuForClerk(Integer page, Integer limit, String name, Long categoryId, Integer status, Integer reviewStatus, Integer applyFor);

    IPage<PmsSpu> pagePmsSpuForAdmin(Integer page, Integer limit, String name, Integer reviewStatus, Long storeId, Integer status, Integer applyFor, Long categoryId);

    /**
     * 商品审核通过
     */
    boolean reviewPass(Long id, Long userId);

    /**
     * 商品审核驳回
     */
    boolean reviewNotPass(Long userId, Long id, String remark);

    /**
     * 商品上架
     *
     * @param id 商品ID
     */
    boolean takeEffect(Long id);

    /**
     * 批量上架
     *
     * @param ids 商品列表
     */
    boolean takeEffectList(String ids);

    /**
     * 商品下架
     */
    boolean invalidation(Long id);

    /**
     * 商品批量下架
     */
    boolean invalidationList(String ids);

    /**
     * 商品申请审核
     */
    boolean apply(Long id);

    /**
     * 批量商品申请审核
     */
    boolean applyList(String ids);

    /**
     * 批量审核通过
     */
    boolean reviewPassList(String ids, Long userId);

    /**
     * 管理员批量下架商品
     */
    boolean adminInvalidationList(String ids);

    /**
     * 移动端某商店的商品
     */
    IPage<PmsSpu> spuListByStore(Integer page, Integer limit, Long storeId);
}
